home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / dev_libs / feelin040718 / arexx / f_create.rexx next >
OS/2 REXX Batch file  |  2004-08-03  |  5KB  |  176 lines

  1. /*
  2.  
  3.    $VER: F_Create.rexx 2.00 (16.03.2003) written by Olivier LAVIALE (gofromiel@numericable.fr)
  4.    ________________________________________________________________________
  5.  
  6.    This tool was written in ARexx because it can be easily modified to  fit
  7.    you  personnal  needs.  But  in  most cases you will not change a bit of
  8.    code, using the opt_xx_xx will do enough (I hope ;-).
  9.  
  10.    F_Create.rexx may use F_Update.rexx depending your kind of project.  You
  11.    should have a look at F_Update.rexx too.
  12.  
  13.    Enjoy !!
  14.  
  15.  */
  16.  
  17. opt_sc_exe = 'RESETOPTS IGNORE 73 NOICON NOVERSION NOSTACKCHECK COMMENTNEST ERRREXX STREQ STRMER GST=Include:F_ALL.GST'
  18. opt_sl_exe = 'NOICONS NODEBUG SC SD QUIET '
  19. opt_sl_lib = 'NOICONS NODEBUG SC SD QUIET ADDSYM LIB Feelin:Sources/F_LIB.lib LIB SC:LIB/sc.lib'
  20. opt_sl_srv = 'NOICONS NODEBUG SC SD QUIET ADDSYM LIB LIB:sc.lib'
  21. copyright  = 'written by Olivier LAVIALE (gofromiel@numericable.fr)' /* Your name here */
  22.  
  23. SIGNAL ON FAILURE
  24.  
  25. IF ~Show('L','rexxsupport.library') THEN DO
  26.    IF ~AddLib('rexxsupport.library',0,-30) THEN DO
  27.       Raise('Unable to open rexxsupport.library')
  28.    END
  29. END
  30.  
  31. PARSE ARG arg_kind arg1 arg2 arg3 arg4
  32.  
  33. IF arg_kind ~= '' THEN DO
  34.    IF DataType(arg_kind) = 'CHAR' THEN DO
  35.       UPPER arg_kind
  36.  
  37.       ADDRESS COMMAND 'Avail >NIL: FLUSH'
  38.  
  39.       IF arg_kind = 'EXE' THEN DO
  40.          IF arg1 = '' THEN Raise('(EXE) Source missing')
  41.  
  42.          PARSE ARG arg_kind arg1 arg2
  43.  
  44.          CreateEXE(arg1,arg2)
  45.       END
  46.       ELSE IF arg_kind = 'LIB' THEN DO
  47.          IF arg1 = '' THEN Raise('(LIB) Destination missing')
  48.          IF DataType(arg1) ~= 'CHAR' THEN Raise('(LIB) Destination not valid (' || arg1 || ')')
  49.          IF arg2 = '' THEN Raise('(LIB) Version missing')
  50.          IF DataType(arg2) ~= 'NUM'  THEN Raise('(LIB) Version number not valid (' || arg2 || ')')
  51.          IF arg3 = '' THEN Raise('(LIB) Revision missing')
  52.          IF DataType(arg3) ~= 'NUM'  THEN Raise('(LIB) Revision number not valid (' || arg3 || ')')
  53.  
  54.          CreateLIB(arg1,arg2,arg3,arg4)
  55.       END
  56.       ELSE IF arg_kind = 'SRV' THEN DO
  57.          IF arg1 = '' THEN Raise('(SRV) Destination missing')
  58.          IF DataType(arg1) ~= 'CHAR' THEN Raise('(SRV) Destination not valid (' || arg1 || ')')
  59.  
  60.          CreateSRV(arg1)
  61.       END
  62.       ELSE IF arg_kind = 'TST' THEN DO
  63.          Raise('Building Testing not implemented yet')
  64.       END
  65.       ELSE Raise('"' || arg_kind || '" is not a valid project. Expecting EXE, LIB or TST')
  66.  
  67.       ADDRESS COMMAND 'Avail >NIL: FLUSH'
  68.    END
  69.    ELSE Raise('"' || arg_kind || '" is not a valid project. Expecting EXE, LIB or TST')
  70. END
  71. ELSE Raise('You MUST supply a kind of project (EXE,LIB,TST)')
  72.  
  73.  
  74. EXIT
  75.  
  76. /***/
  77.  
  78. /*+*/CreateEXE: PROCEDURE EXPOSE opt_sc_exe opt_sl_exe
  79.    PARSE ARG src, list
  80.  
  81.    IF Right(src,2) = '.c' THEN src = Left(src,Length(src) - 2)
  82.  
  83.    IF Exists(src || '.c') THEN DO
  84.       ADDRESS COMMAND 'SC' opt_sc_exe src || '.c'
  85.       ADDRESS COMMAND 'SLink LIB:c.o' src || '.o' list 'TO' src 'LIB LIB:SC.lib' opt_sl_exe
  86.       ADDRESS COMMAND 'Delete >NIL:'  src || '.o'
  87.    END
  88.    ELSE Raise('Source' src || '.c' 'does not exists')
  89.  
  90.    RETURN 0
  91. /***/
  92. /*+*/CreateLIB: PROCEDURE EXPOSE opt_sl_lib copyright
  93.    PARSE ARG dest, vers, revi, obj_list
  94.  
  95.    Say('F_Create.rexx: Building library "' || dest || '"...')
  96.  
  97.    ADDRESS COMMAND 'F_Update.rexx LIB' dest vers revi
  98.  
  99.    IF (Right(dest,3) = '.fc' | Right(dest,3) = '.fp') THEN DO
  100.       name = Translate(dest,'  ',':/')
  101.       name = Word(name,Words(name))
  102.       temp = 'T:F_Create_' || Left(name,Length(name) - 3)
  103.       name = 'FC_' || Left(name,Length(name) - 3)
  104.  
  105.       ADDRESS COMMAND 'Feelin:Tools/CreateCCLib NAME' name 'V=' || vers 'R=' || revi 'C="' || copyright || '" DST="' || temp || '.a"'
  106.  
  107.       IF Exists(temp || '.a') THEN DO
  108.          ADDRESS COMMAND 'PhxAss QUIET' temp || '.a'
  109.       END
  110.    END
  111.  
  112.    list = CreateLST(temp || '.o Project.o') obj_list
  113.  
  114.    Say('Library' dest 'Version' vers || '.' || revi)
  115.    Say('Linking' list)
  116.  
  117.    ADDRESS COMMAND 'sLink FROM ' list 'TO' dest opt_sl_lib
  118.    ADDRESS COMMAND 'Delete QUIET' temp || '.?'
  119.  
  120.    RETURN 0
  121. /***/
  122. /*+*/CreateSRV: PROCEDURE EXPOSE opt_sl_srv
  123.    PARSE ARG dest
  124.  
  125.    Say('F_Create.rexx: Building server "' || dest || '"...')
  126.  
  127.    ADDRESS COMMAND 'F_Update.rexx SRV' dest
  128.  
  129.    list = CreateLST('lib:c.o Project.o')
  130.  
  131.    Say('Server' dest)
  132.    Say('Linking' list)
  133.  
  134.    ADDRESS COMMAND 'sLink FROM ' list 'TO' dest opt_sl_srv
  135.  
  136.    RETURN 0
  137. /***/
  138. /*+*/CreateTST: PROCEDURE
  139.    Say('F_Create.rexx: Building a Testing...')
  140.  
  141.    ADDRESS COMMAND 'F_Update.rexx TST Test'
  142.  
  143.    list = CreateLST('LIB:c.o Project.o')
  144.  
  145.    Say('Testing Test')
  146.    Say('Linking' list)
  147.  
  148.    ADDRESS COMMAND 'sLink FROM ' list 'TO Test QUIET NOICONS NODEBUG ADDSYM LIB LIB:SC.lib'
  149.  
  150.    RETURN 0
  151. /***/
  152. /*+*/CreateLST: PROCEDURE
  153.    PARSE ARG list
  154.  
  155.    dirl = ShowDir('',FILE,' ')
  156.  
  157.    DO i = 1 TO Words(dirl)
  158.       file = Word(dirl,i)
  159.  
  160.       IF Right(file,2) = '.o' THEN
  161.          IF file ~= 'Project.o' THEN
  162.             IF file ~= 'library.o' THEN list = list file
  163.    END
  164.  
  165.    RETURN list
  166. /***/
  167.  
  168. /*** Handles ***************************************************************/
  169.  
  170. Raise: PROCEDURE
  171.    Say('F_Create.Error:' arg(1))
  172.    EXIT
  173.  
  174. Failure:
  175.    Raise(SIGL || ': ' || SourceLine(SIGL))
  176.